﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//using namespace std;
//const int N = 101;
//int sum[N][N];
//int n;
//void get(int x, int y, int& max)//左上角是(x,y),右下角是(i,j)
//{
//    for (int i = x; i <= n; i++)
//    {
//        for (int j = y + 1; j <= n; j++)
//        {
//            int t = sum[i][j] - sum[x - 1][j] - sum[i][y - 1] + sum[x - 1][y - 1];
//            //cout<< t << "  ";
//            if (t > max) {
//                max = t;
//            }
//        }
//    }
//}
//int main()
//{
//
//    while (cin >> n)
//    {
//        for (int i = 1; i <= n; i++)
//        {
//            for (int j = 1; j <= n; j++)
//            {
//                int t; cin >> t;
//                sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + t;
//            }
//        }
//        int max = 0x80000001;
//        for (int i = 1; i <= n; i++)
//        {
//            for (int j = 1; j <= n; j++)
//            {
//                get(i, j, max);
//            }
//        }
//        cout << max << endl;
//    }
//}


///**
// * struct TreeNode {
// *	int val;
// *	struct TreeNode *left;
// *	struct TreeNode *right;
// *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
// * };
// */
//class Solution
//{
//public:
//    int Height(TreeNode* root)
//    {
//        if (root == nullptr)
//        {
//            return 0;
//        }
//        int leftchild = Height(root->left);
//        int rightchild = Height(root->right);
//        return leftchild > rightchild ? leftchild + 1 : rightchild + 1;
//    }
//    bool IsBalanced_Solution(TreeNode* pRoot)
//    {
//        if (pRoot == nullptr)
//        {
//            return true;
//        }
//        int leftheight = Height(pRoot->left);
//        int rightheight = Height(pRoot->right);
//        if (abs(leftheight - rightheight) > 1)
//        {
//            return false;
//        }
//        return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
//    }
//};


//#include <stdio.h>
//#include <string.h>
//#include <unistd.h>
//#include <sys/types.h>
//#include <sys/wait.h>
//
//void writer(int wfd)
//{
//	const char* str = "hello father, I am child";
//	char buffer[128];
//	int cnt = 0;
//	pid_t pid = getpid();
//	while (1)
//	{
//		snprintf(buffer, sizeof(buffer), "message: %s, pid: %d, count: %d\n", str, pid, cnt);
//		write(wfd, buffer, strlen(buffer));
//		cnt++;
//		sleep(1);
//	}
//}
//void reader(int rfd)
//{
//	char buffer[1024];
//	while (1)
//	{
//		ssize_t n = read(rfd, buffer, sizeof(buffer) - 1);
//		(void)n;
//		printf("father get a message: %s", buffer);
//	}
//}
//
//int main()
//{
//	//1，输出管道创建文件描述符数组的读端和写端
//	int pipefd[2];
//	int n = pipe(pipefd);
//	if (n < 0)
//	{
//		return 1;
//	}
//	printf("pipefd[0]: %d, pipefd[1]: %d\n", pipefd[0]/*read*/, pipefd[1]/*write*/);// 3, 4
//
//	//2，查看父子进程间的通信
//	pid_t id = fork();
//	if (id == 0)
//	{
//		//child: write
//		close(pipefd[0]);
//		writer(pipefd[1]);
//		exit(0);
//	}
//	//father: read
//	close(pipefd[1]);
//	reader(pipefd[0]);
//	wait(NULL);
//	return 0;
//}


//#include <stdio.h>  
//#include <stdlib.h>  
//#include <unistd.h>  
//#include <string.h>  
//
//int main() {
//    int pipefd[2];
//    pid_t pid;
//    char buf[1024];
//
//    // 创建管道  
//    if (pipe(pipefd) == -1) {
//        perror("pipe");
//        exit(EXIT_FAILURE);
//    }
//
//    // 创建子进程  
//    pid = fork();
//    if (pid == -1) {
//        perror("fork");
//        exit(EXIT_FAILURE);
//    }
//
//    // 父进程  
//    if (pid > 0) {
//        const char* msg = "Hello from parent";
//        write(pipefd[1], msg, strlen(msg) + 1); // 写入管道  
//        close(pipefd[0]); // 关闭读端  
//        wait(NULL); // 等待子进程结束  
//    }
//    // 子进程  
//    else {
//        close(pipefd[1]); // 关闭写端  
//        ssize_t bytesRead = read(pipefd[0], buf, sizeof(buf)); // 从管道读取  
//        if (bytesRead > 0) {
//            buf[bytesRead - 1] = '\0'; // 移除末尾的换行符（如果有的话）  
//            printf("Received: %s\n", buf);
//        }
//    }
//
//    return 0;
//}
